608060405234801561000f575f80fd5b50336040518060400160405280601081526020017f426974636f696e205374616e64617264000000000000000000000000000000008152506040518060400160405280600581526020017f4254434152000000000000000000000000000000000000000000000000000000815250816003908161008c91906107be565b50806004908161009c91906107be565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361010f575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161010691906108cc565b60405180910390fd5b61011e816101a360201b60201c565b505f73aadbf43828b7e62bbe43351c91b97a539b6236f3905061017a81600a61014b6101d960201b60201c565b600a6101579190610a4d565b629896806101659190610a97565b61016f9190610b05565b6101e160201b60201c565b61019d73aadbf43828b7e62bbe43351c91b97a539b6236f36101a360201b60201c565b50610bc5565b60065f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556101d68161026660201b60201c565b50565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610251575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161024891906108cc565b60405180910390fd5b6102625f838361032960201b60201c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61033a83838361036160201b60201c565b61034b83838361036660201b60201c565b61035c83838361057f60201b60201c565b505050565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103b6578060025f8282546103aa9190610b35565b92505081905550610484565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561043f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161043693929190610b77565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104cb578060025f8282540392505081905550610515565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105729190610bac565b60405180910390a3505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806105ff57607f821691505b602082108103610612576106116105bb565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610639565b61067e8683610639565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6106c26106bd6106b884610696565b61069f565b610696565b9050919050565b5f819050919050565b6106db836106a8565b6106ef6106e7826106c9565b848454610645565b825550505050565b5f90565b6107036106f7565b61070e8184846106d2565b505050565b5b81811015610731576107265f826106fb565b600181019050610714565b5050565b601f8211156107765761074781610618565b6107508461062a565b8101602085101561075f578190505b61077361076b8561062a565b830182610713565b50505b505050565b5f82821c905092915050565b5f6107965f198460080261077b565b1980831691505092915050565b5f6107ae8383610787565b9150826002028217905092915050565b6107c782610584565b67ffffffffffffffff8111156107e0576107df61058e565b5b6107ea82546105e8565b6107f5828285610735565b5f60209050601f831160018114610826575f8415610814578287015190505b61081e85826107a3565b865550610885565b601f19841661083486610618565b5f5b8281101561085b57848901518255600182019150602085019450602081019050610836565b868310156108785784890151610874601f891682610787565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6108b68261088d565b9050919050565b6108c6816108ac565b82525050565b5f6020820190506108df5f8301846108bd565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561096757808604811115610943576109426108e5565b5b60018516156109525780820291505b808102905061096085610912565b9450610927565b94509492505050565b5f8261097f5760019050610a3a565b8161098c575f9050610a3a565b81600181146109a257600281146109ac576109db565b6001915050610a3a565b60ff8411156109be576109bd6108e5565b5b8360020a9150848211156109d5576109d46108e5565b5b50610a3a565b5060208310610133831016604e8410600b8410161715610a105782820a905083811115610a0b57610a0a6108e5565b5b610a3a565b610a1d848484600161091e565b92509050818404811115610a3457610a336108e5565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610a5782610696565b9150610a6283610a41565b9250610a8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610970565b905092915050565b5f610aa182610696565b9150610aac83610696565b9250828202610aba81610696565b91508282048414831517610ad157610ad06108e5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610b0f82610696565b9150610b1a83610696565b925082610b2a57610b29610ad8565b5b828204905092915050565b5f610b3f82610696565b9150610b4a83610696565b9250828201905080821115610b6257610b616108e5565b5b92915050565b610b7181610696565b82525050565b5f606082019050610b8a5f8301866108bd565b610b976020830185610b68565b610ba46040830184610b68565b949350505050565b5f602082019050610bbf5f830184610b68565b92915050565b611b4580610bd25f395ff3fe608060405234801561000f575f80fd5b5060043610610135575f3560e01c8063715018a6116100b657806395d89b411161007a57806395d89b4114610315578063a9059cbb14610333578063a9d3cd8a14610363578063dd62ed3e1461037f578063e30c3978146103af578063f2fde38b146103cd57610135565b8063715018a6146102a957806379ba5097146102b357806379cc6790146102bd5780638da5cb5b146102d95780638fffabed146102f757610135565b806323b872dd116100fd57806323b872dd146101f1578063313ce5671461022157806342966c681461023f578063502f74461461025b57806370a082311461027957610135565b806306fdde0314610139578063095ea7b31461015757806318160ddd1461018757806318533a0d146101a55780631e9fe6c6146101c1575b5f80fd5b6101416103e9565b60405161014e91906115c3565b60405180910390f35b610171600480360381019061016c9190611674565b610479565b60405161017e91906116cc565b60405180910390f35b61018f61049b565b60405161019c91906116f4565b60405180910390f35b6101bf60048036038101906101ba919061170d565b6104a4565b005b6101db60048036038101906101d6919061170d565b61058a565b6040516101e891906116cc565b60405180910390f35b61020b60048036038101906102069190611738565b6105a7565b60405161021891906116cc565b60405180910390f35b6102296105d5565b60405161023691906117a3565b60405180910390f35b610259600480360381019061025491906117bc565b6105dd565b005b6102636105f1565b6040516102709190611842565b60405180910390f35b610293600480360381019061028e919061170d565b610616565b6040516102a091906116f4565b60405180910390f35b6102b161065b565b005b6102bb61066e565b005b6102d760048036038101906102d29190611674565b6106fc565b005b6102e161071c565b6040516102ee919061186a565b60405180910390f35b6102ff610744565b60405161030c919061186a565b60405180910390f35b61031d610769565b60405161032a91906115c3565b60405180910390f35b61034d60048036038101906103489190611674565b6107f9565b60405161035a91906116cc565b60405180910390f35b61037d600480360381019061037891906118ad565b61081b565b005b610399600480360381019061039491906118eb565b61091a565b6040516103a691906116f4565b60405180910390f35b6103b761099c565b6040516103c4919061186a565b60405180910390f35b6103e760048036038101906103e2919061170d565b6109c4565b005b6060600380546103f890611956565b80601f016020809104026020016040519081016040528092919081815260200182805461042490611956565b801561046f5780601f106104465761010080835404028352916020019161046f565b820191905f5260205f20905b81548152906001019060200180831161045257829003601f168201915b5050505050905090565b5f80610483610a70565b9050610490818585610a77565b600191505092915050565b5f600254905090565b600660159054906101000a900460ff16806104cc5750600660149054906101000a900460ff16155b61050b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610502906119f6565b60405180910390fd5b5f600660159054906101000a900460ff16159050801561055c576001600660156101000a81548160ff0219169083151502179055506001600660146101000a81548160ff0219169083151502179055505b61056582610a89565b8015610586575f600660156101000a81548160ff0219169083151502179055505b5050565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f806105b1610a70565b90506105be858285610d1a565b6105c9858585610dac565b60019150509392505050565b5f6012905090565b6105ee6105e8610a70565b82610e9c565b50565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610663610f1b565b61066c5f610fa2565b565b5f610677610a70565b90508073ffffffffffffffffffffffffffffffffffffffff1661069861099c565b73ffffffffffffffffffffffffffffffffffffffff16146106f057806040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016106e7919061186a565b60405180910390fd5b6106f981610fa2565b50565b61070e82610708610a70565b83610d1a565b6107188282610e9c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461077890611956565b80601f01602080910402602001604051908101604052809291908181526020018280546107a490611956565b80156107ef5780601f106107c6576101008083540402835291602001916107ef565b820191905f5260205f20905b8154815290600101906020018083116107d257829003601f168201915b5050505050905090565b5f80610803610a70565b9050610810818585610dac565b600191505092915050565b610823610f1b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806108ca575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561090c57816040517f86bd5ef6000000000000000000000000000000000000000000000000000000008152600401610903919061186a565b60405180910390fd5b6109168282610fd2565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6109cc610f1b565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16610a2b61071c565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f33905090565b610a848383836001611078565b505050565b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b579190611a28565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c019190611a28565b6040518363ffffffff1660e01b8152600401610c1e929190611a53565b6020604051808303815f875af1158015610c3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c5e9190611a28565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ca8816001610fd2565b610cd460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610fd2565b8073ffffffffffffffffffffffffffffffffffffffff167fbc052db65df144ad4f71f02da93cae3d4401104c30ac374d7cc10d87ee07b60260405160405180910390a250565b5f610d25848461091a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610da65781811015610d97578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610d8e93929190611a7a565b60405180910390fd5b610da584848484035f611078565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e1c575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e13919061186a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e8c575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610e83919061186a565b60405180910390fd5b610e97838383611247565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0c575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610f03919061186a565b60405180910390fd5b610f17825f83611247565b5050565b610f23610a70565b73ffffffffffffffffffffffffffffffffffffffff16610f4161071c565b73ffffffffffffffffffffffffffffffffffffffff1614610fa057610f64610a70565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f97919061186a565b60405180910390fd5b565b60065f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055610fcf8161126d565b50565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f2cc8631dda80fe178488d3174721fafacf84b0f194a7eddae85c9bcc599ac78b8260405161106c91906116cc565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036110e8575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016110df919061186a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611158575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161114f919061186a565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611241578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161123891906116f4565b60405180910390a35b50505050565b611252838383611330565b61125d838383611335565b61126883838361154e565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611385578060025f8282546113799190611adc565b92505081905550611453565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561140e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161140593929190611a7a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361149a578060025f82825403925050819055506114e4565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161154191906116f4565b60405180910390a3505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61159582611553565b61159f818561155d565b93506115af81856020860161156d565b6115b88161157b565b840191505092915050565b5f6020820190508181035f8301526115db818461158b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611610826115e7565b9050919050565b61162081611606565b811461162a575f80fd5b50565b5f8135905061163b81611617565b92915050565b5f819050919050565b61165381611641565b811461165d575f80fd5b50565b5f8135905061166e8161164a565b92915050565b5f806040838503121561168a576116896115e3565b5b5f6116978582860161162d565b92505060206116a885828601611660565b9150509250929050565b5f8115159050919050565b6116c6816116b2565b82525050565b5f6020820190506116df5f8301846116bd565b92915050565b6116ee81611641565b82525050565b5f6020820190506117075f8301846116e5565b92915050565b5f60208284031215611722576117216115e3565b5b5f61172f8482850161162d565b91505092915050565b5f805f6060848603121561174f5761174e6115e3565b5b5f61175c8682870161162d565b935050602061176d8682870161162d565b925050604061177e86828701611660565b9150509250925092565b5f60ff82169050919050565b61179d81611788565b82525050565b5f6020820190506117b65f830184611794565b92915050565b5f602082840312156117d1576117d06115e3565b5b5f6117de84828501611660565b91505092915050565b5f819050919050565b5f61180a611805611800846115e7565b6117e7565b6115e7565b9050919050565b5f61181b826117f0565b9050919050565b5f61182c82611811565b9050919050565b61183c81611822565b82525050565b5f6020820190506118555f830184611833565b92915050565b61186481611606565b82525050565b5f60208201905061187d5f83018461185b565b92915050565b61188c816116b2565b8114611896575f80fd5b50565b5f813590506118a781611883565b92915050565b5f80604083850312156118c3576118c26115e3565b5b5f6118d08582860161162d565b92505060206118e185828601611899565b9150509250929050565b5f8060408385031215611901576119006115e3565b5b5f61190e8582860161162d565b925050602061191f8582860161162d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061196d57607f821691505b6020821081036119805761197f611929565b5b50919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f6119e0602e8361155d565b91506119eb82611986565b604082019050919050565b5f6020820190508181035f830152611a0d816119d4565b9050919050565b5f81519050611a2281611617565b92915050565b5f60208284031215611a3d57611a3c6115e3565b5b5f611a4a84828501611a14565b91505092915050565b5f604082019050611a665f83018561185b565b611a73602083018461185b565b9392505050565b5f606082019050611a8d5f83018661185b565b611a9a60208301856116e5565b611aa760408301846116e5565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611ae682611641565b9150611af183611641565b9250828201905080821115611b0957611b08611aaf565b5b9291505056fea2646970667358221220c33531afb3e1d82d117442a4d5247f703d8bf5b4906c0d6d9f82af9c07479dc264736f6c63430008190033