608060405234801562000010575f80fd5b5060405162002860380380620028608339818101604052810190620000369190620001ea565b8181815f9081620000489190620004a4565b5080600190816200005a9190620004a4565b505050505062000588565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620000c6826200007e565b810181811067ffffffffffffffff82111715620000e857620000e76200008e565b5b80604052505050565b5f620000fc62000065565b90506200010a8282620000bb565b919050565b5f67ffffffffffffffff8211156200012c576200012b6200008e565b5b62000137826200007e565b9050602081019050919050565b5f5b838110156200016357808201518184015260208101905062000146565b5f8484015250505050565b5f620001846200017e846200010f565b620000f1565b905082815260208101848484011115620001a357620001a26200007a565b5b620001b084828562000144565b509392505050565b5f82601f830112620001cf57620001ce62000076565b5b8151620001e18482602086016200016e565b91505092915050565b5f80604083850312156200020357620002026200006e565b5b5f83015167ffffffffffffffff81111562000223576200022262000072565b5b6200023185828601620001b8565b925050602083015167ffffffffffffffff81111562000255576200025462000072565b5b6200026385828601620001b8565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620002bc57607f821691505b602082108103620002d257620002d162000277565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620003367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002f9565b620003428683620002f9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200038c6200038662000380846200035a565b62000363565b6200035a565b9050919050565b5f819050919050565b620003a7836200036c565b620003bf620003b68262000393565b84845462000305565b825550505050565b5f90565b620003d5620003c7565b620003e28184846200039c565b505050565b5b818110156200040957620003fd5f82620003cb565b600181019050620003e8565b5050565b601f82111562000458576200042281620002d8565b6200042d84620002ea565b810160208510156200043d578190505b620004556200044c85620002ea565b830182620003e7565b50505b505050565b5f82821c905092915050565b5f6200047a5f19846008026200045d565b1980831691505092915050565b5f62000494838362000469565b9150826002028217905092915050565b620004af826200026d565b67ffffffffffffffff811115620004cb57620004ca6200008e565b5b620004d78254620002a4565b620004e48282856200040d565b5f60209050601f8311600181146200051a575f841562000505578287015190505b62000511858262000487565b86555062000580565b601f1984166200052a86620002d8565b5f5b8281101562000553578489015182556001820191506020850194506020810190506200052c565b868310156200057357848901516200056f601f89168262000469565b8355505b6001600288020188555050505b505050505050565b6122ca80620005965f395ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c806342842e0e116100a057806395d89b411161006f57806395d89b41146102c7578063a22cb465146102e5578063b88d4fde14610301578063c87b56dd1461031d578063e985e9c51461034d57610109565b806342842e0e1461021b5780634f6ccce7146102375780636352211e1461026757806370a082311461029757610109565b80631249c58b116100dc5780631249c58b146101a757806318160ddd146101b157806323b872dd146101cf5780632f745c59146101eb57610109565b806301ffc9a71461010d57806306fdde031461013d578063081812fc1461015b578063095ea7b31461018b575b5f80fd5b61012760048036038101906101229190611a0a565b61037d565b6040516101349190611a4f565b60405180910390f35b6101456103f6565b6040516101529190611af2565b60405180910390f35b61017560048036038101906101709190611b45565b610485565b6040516101829190611baf565b60405180910390f35b6101a560048036038101906101a09190611bf2565b6104a0565b005b6101af6104b6565b005b6101b96104da565b6040516101c69190611c3f565b60405180910390f35b6101e960048036038101906101e49190611c58565b6104e6565b005b61020560048036038101906102009190611bf2565b6105e5565b6040516102129190611c3f565b60405180910390f35b61023560048036038101906102309190611c58565b610689565b005b610251600480360381019061024c9190611b45565b6106a8565b60405161025e9190611c3f565b60405180910390f35b610281600480360381019061027c9190611b45565b61071a565b60405161028e9190611baf565b60405180910390f35b6102b160048036038101906102ac9190611ca8565b61072b565b6040516102be9190611c3f565b60405180910390f35b6102cf6107e1565b6040516102dc9190611af2565b60405180910390f35b6102ff60048036038101906102fa9190611cfd565b610871565b005b61031b60048036038101906103169190611e67565b610887565b005b61033760048036038101906103329190611b45565b6108a4565b6040516103449190611af2565b60405180910390f35b61036760048036038101906103629190611ee7565b61093c565b6040516103749190611a4f565b60405180910390f35b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103ef57506103ee826109ca565b5b9050919050565b60605f805461040490611f52565b80601f016020809104026020016040519081016040528092919081815260200182805461043090611f52565b801561047b5780601f106104525761010080835404028352916020019161047b565b820191905f5260205f20905b81548152906001019060200180831161045e57829003601f168201915b5050505050905090565b5f61048f82610aab565b5061049982610b31565b9050919050565b6104b282826104ad610b6a565b610b71565b5050565b5f60016104c16104da565b6104cb9190611faf565b90506104d73382610b83565b50565b5f600880549050905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610556575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161054d9190611baf565b60405180910390fd5b5f6105698383610564610b6a565b610ba0565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105df578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105d693929190611fe2565b60405180910390fd5b50505050565b5f6105ef8361072b565b82106106345782826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161062b929190612017565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b6106a383838360405180602001604052805f815250610887565b505050565b5f6106b16104da565b82106106f6575f826040517fa57d13dc0000000000000000000000000000000000000000000000000000000081526004016106ed929190612017565b60405180910390fd5b6008828154811061070a5761070961203e565b5b905f5260205f2001549050919050565b5f61072482610aab565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361079c575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016107939190611baf565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060600180546107f090611f52565b80601f016020809104026020016040519081016040528092919081815260200182805461081c90611f52565b80156108675780601f1061083e57610100808354040283529160200191610867565b820191905f5260205f20905b81548152906001019060200180831161084a57829003601f168201915b5050505050905090565b61088361087c610b6a565b8383610cba565b5050565b6108928484846104e6565b61089e84848484610e23565b50505050565b60605f73ffffffffffffffffffffffffffffffffffffffff166108c683610aab565b73ffffffffffffffffffffffffffffffffffffffff160361091c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610913906120db565b60405180910390fd5b604051806080016040528060608152602001612235606091399050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aa45750610aa382610fd5565b5b9050919050565b5f80610ab68361103e565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b2857826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610b1f9190611c3f565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610b7e8383836001611077565b505050565b610b9c828260405180602001604052805f815250611236565b5050565b5f80610bad858585611251565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bf057610beb8461145c565b610c2f565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c2e57610c2d81856114a0565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610c7057610c6b846115ea565b610caf565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cae57610cad85856116aa565b5b5b809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d2a57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610d219190611baf565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e169190611a4f565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115610fcf578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610e66610b6a565b8685856040518563ffffffff1660e01b8152600401610e88949392919061214b565b6020604051808303815f875af1925050508015610ec357506040513d601f19601f82011682018060405250810190610ec091906121a9565b60015b610f44573d805f8114610ef1576040519150601f19603f3d011682016040523d82523d5f602084013e610ef6565b606091505b505f815103610f3c57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f339190611baf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610fcd57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610fc49190611baf565b60405180910390fd5b505b50505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806110af57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156111e1575f6110be84610aab565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561112857508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561113b5750611139818461093c565b155b1561117d57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016111749190611baf565b60405180910390fd5b81156111df57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611240838361172e565b61124c5f848484610e23565b505050565b5f8061125c8461103e565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461129d5761129c818486611821565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611328576112dc5f855f80611077565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146113a757600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f6114aa8361072b565b90505f60075f8481526020019081526020015f20549050818114611581575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f60016008805490506115fd91906121d4565b90505f60095f8481526020019081526020015f205490505f600883815481106116295761162861203e565b5b905f5260205f200154905080600883815481106116495761164861203e565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f9055600880548061169157611690612207565b5b600190038181905f5260205f20015f9055905550505050565b5f60016116b68461072b565b6116c091906121d4565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361179e575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016117959190611baf565b60405180910390fd5b5f6117aa83835f610ba0565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461181c575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016118139190611baf565b60405180910390fd5b505050565b61182c8383836118e4565b6118df575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118a057806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016118979190611c3f565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016118d6929190612017565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561199b57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061195c575061195b848461093c565b5b8061199a57508273ffffffffffffffffffffffffffffffffffffffff1661198283610b31565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6119e9816119b5565b81146119f3575f80fd5b50565b5f81359050611a04816119e0565b92915050565b5f60208284031215611a1f57611a1e6119ad565b5b5f611a2c848285016119f6565b91505092915050565b5f8115159050919050565b611a4981611a35565b82525050565b5f602082019050611a625f830184611a40565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a9f578082015181840152602081019050611a84565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611ac482611a68565b611ace8185611a72565b9350611ade818560208601611a82565b611ae781611aaa565b840191505092915050565b5f6020820190508181035f830152611b0a8184611aba565b905092915050565b5f819050919050565b611b2481611b12565b8114611b2e575f80fd5b50565b5f81359050611b3f81611b1b565b92915050565b5f60208284031215611b5a57611b596119ad565b5b5f611b6784828501611b31565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611b9982611b70565b9050919050565b611ba981611b8f565b82525050565b5f602082019050611bc25f830184611ba0565b92915050565b611bd181611b8f565b8114611bdb575f80fd5b50565b5f81359050611bec81611bc8565b92915050565b5f8060408385031215611c0857611c076119ad565b5b5f611c1585828601611bde565b9250506020611c2685828601611b31565b9150509250929050565b611c3981611b12565b82525050565b5f602082019050611c525f830184611c30565b92915050565b5f805f60608486031215611c6f57611c6e6119ad565b5b5f611c7c86828701611bde565b9350506020611c8d86828701611bde565b9250506040611c9e86828701611b31565b9150509250925092565b5f60208284031215611cbd57611cbc6119ad565b5b5f611cca84828501611bde565b91505092915050565b611cdc81611a35565b8114611ce6575f80fd5b50565b5f81359050611cf781611cd3565b92915050565b5f8060408385031215611d1357611d126119ad565b5b5f611d2085828601611bde565b9250506020611d3185828601611ce9565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611d7982611aaa565b810181811067ffffffffffffffff82111715611d9857611d97611d43565b5b80604052505050565b5f611daa6119a4565b9050611db68282611d70565b919050565b5f67ffffffffffffffff821115611dd557611dd4611d43565b5b611dde82611aaa565b9050602081019050919050565b828183375f83830152505050565b5f611e0b611e0684611dbb565b611da1565b905082815260208101848484011115611e2757611e26611d3f565b5b611e32848285611deb565b509392505050565b5f82601f830112611e4e57611e4d611d3b565b5b8135611e5e848260208601611df9565b91505092915050565b5f805f8060808587031215611e7f57611e7e6119ad565b5b5f611e8c87828801611bde565b9450506020611e9d87828801611bde565b9350506040611eae87828801611b31565b925050606085013567ffffffffffffffff811115611ecf57611ece6119b1565b5b611edb87828801611e3a565b91505092959194509250565b5f8060408385031215611efd57611efc6119ad565b5b5f611f0a85828601611bde565b9250506020611f1b85828601611bde565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611f6957607f821691505b602082108103611f7c57611f7b611f25565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb982611b12565b9150611fc483611b12565b9250828201905080821115611fdc57611fdb611f82565b5b92915050565b5f606082019050611ff55f830186611ba0565b6120026020830185611c30565b61200f6040830184611ba0565b949350505050565b5f60408201905061202a5f830185611ba0565b6120376020830184611c30565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f6120c5602f83611a72565b91506120d08261206b565b604082019050919050565b5f6020820190508181035f8301526120f2816120b9565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f61211d826120f9565b6121278185612103565b9350612137818560208601611a82565b61214081611aaa565b840191505092915050565b5f60808201905061215e5f830187611ba0565b61216b6020830186611ba0565b6121786040830185611c30565b818103606083015261218a8184612113565b905095945050505050565b5f815190506121a3816119e0565b92915050565b5f602082840312156121be576121bd6119ad565b5b5f6121cb84828501612195565b91505092915050565b5f6121de82611b12565b91506121e983611b12565b925082820390508181111561220157612200611f82565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfe68747470733a2f2f62726f776e2d666f726d616c2d6d756c652d3132332e6d7970696e6174612e636c6f75642f697066732f516d503272715477684c47363665426538446a6d556657466f464c3776437a3369514639367634554d6432474662a264697066735822122086beef67b440686349dddcee64751c5ca9c7ddc06efc155c2d4654ba9ffd30c164736f6c634300081700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000054d794e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054d594e4654000000000000000000000000000000000000000000000000000000